package nl.hu.vakantievibes.ui;

import com.google.gwt.event.dom.client.ClickEvent;

import nl.hu.vakantievibes.client.FieldVerifier;
import nl.hu.vakantievibes.client.ServerCall;
import nl.hu.vakantievibes.client.Systeem;
import nl.hu.vakantievibes.domain.Gebruiker;
import nl.hu.vakantievibes.domain.Reis;

import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.VerticalPanel;

public class BerichtVerzenden
{
	private Gebruiker ontvanger;
	private Reis deReis;
	private Label lblOntvanger;
	private Button btnVerstuur, btnAnnuleren;
	private TextArea txtBericht;
	private VerticalPanel vp;
	private HorizontalPanel hp;	
	
	public BerichtVerzenden(Gebruiker g, Reis r)
	{
		ontvanger = g;
		deReis = r;
		
		lblOntvanger = new Label("Aan: " + ontvanger.getNaam());
		txtBericht = new TextArea();
		txtBericht.setPixelSize(500, 200);
		btnVerstuur = new Button("Verzenden");
		btnAnnuleren = new Button("Annuleren");
		
		btnVerstuur.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				verstuurBericht();
			}
		});
		
		btnAnnuleren.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				History.newItem("allereizen");
			}
		});
	}
	
	public Panel createPage()
	{
		vp = new VerticalPanel();
		hp = new HorizontalPanel();
		
		vp.add(lblOntvanger);
		vp.add(txtBericht);
		hp.add(btnVerstuur);
		hp.add(btnAnnuleren);
		vp.add(hp);
		
		return vp;
	}
	
	public void verstuurBericht(){
		if(FieldVerifier.get().checkField(txtBericht.getText(), 5, 1000)) {
			AsyncCallback<java.lang.Boolean> callback = new AsyncCallback<java.lang.Boolean>() {
				@Override
				public void onFailure(Throwable caught) {
					NotificationManager.get().createNotification("Er is een server fout opgetreden. Excuses voor het ongemak.");
				}
				@Override
				public void onSuccess(java.lang.Boolean result) {
					if(result) {
						NotificationManager.get().createNotification("Uw aanvraag is succesvol ingediend.");
						History.newItem("mijncarpools");
					} else {
						NotificationManager.get().createNotification("Er is een fout opgetreden tijdens het indienen van uw aanvraag.");
					}
				}
			};
			new ServerCall().verstuurBericht(ontvanger, Systeem.get().getGebruiker(), deReis, txtBericht.getText(), callback);
		} else {
			txtBericht.setStyleName("red-border");
		}
	}
}